<?php
/**
 * Project:     drylamp - rapid application development framework for php
 * File:        SimpleTableScaffolder.php
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 *
 * @copyright 2008 Ilya St.
 * @author Ilya St. <provided at gmail dot com>
 * @version 1.0
 */

class SimpleTableScaffolder extends Scaffolder implements ScaffoldableParent {
  
  protected $mDataFieldsArray = null;
  private $mChildNodes = array();
  
  
  public function __construct(Exposable  $pDataObject) {
    $this->mDataFieldsArray = $pDataObject->getFields();
  }
  
  public function getContainerTpl() {
    return file_get_contents( $this->getMyTplDir() .'tpl_simple_table_container.html' );
  }
  
  
  public function getSingleEmitTpl() {
    $outStr = "<tr>\n";
    // if extended by ActiveRecord - just get data fields through getter:
    if ( $this instanceof Exposable ) $this->mDataFieldsArray = $this->getFields();
    foreach($this->mDataFieldsArray as $key=>$value) {
      $outStr .= "<td>{\$dataObject_".Scaffolder::INDEX_TOKEN."->".trim($key)."}</td>\n";
    }
    
    $outStr .= "</tr>\n";
    
    //take care of child nodes:
    $childNodes = $this->getChildren(); 
    // children iterator should be unconditional to number of children
    $outStr .= "<tr>\n<td colspan=\"".count($this->mDataFieldsArray)."\">\n";
    foreach($childNodes as $node) {
      $sn = new ScaffoldNode($node);
      $outStr .= $sn->emit();
    }
    $outStr .= "\n</td>\n</tr>\n";
    
    return $outStr;
  }
  
  
  protected function getMyTplDir() {
    static $myTplDir;
    if (is_null($myTplDir)) $myTplDir = dirname(__FILE__)."/simple_table_tpls/";
    return $myTplDir; 
  }
  
  public function getChildren() {
    return $this->mChildNodes;
  }
  
  public function attachChild(Scaffoldable $pChild) {
    $this->mChildNodes[] = $pChild;
    return count($this->mChildNodes)-1;
  }
  
  public function removeChild($pIndex) {
    // TODO: TBD
  }
  
}
?>